package org.sistemafinanciero.entity;

// Generated 02-may-2014 11:48:28 by Hibernate Tools 4.0.0

import java.math.BigInteger;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 * Socio generated by hbm2java
 */
@Entity
@Table(name = "SOCIO", schema = "BDSISTEMAFINANCIERO")
@XmlRootElement(name = "socio")
@XmlAccessorType(XmlAccessType.NONE)
@NamedQueries({
		@NamedQuery(name = Socio.FindByPNTipoAndNumeroDocumento, query = "SELECT s FROM Socio s INNER JOIN s.personaNatural pn WHERE pn.numeroDocumento = :numerodocumento AND pn.tipoDocumento.idTipoDocumento = :idtipodocumento AND s.estado = true"),
		@NamedQuery(name = Socio.FindByPJTipoAndNumeroDocumento, query = "SELECT s FROM Socio s INNER JOIN s.personaJuridica pj WHERE pj.numeroDocumento = :numerodocumento AND pj.tipoDocumento.idTipoDocumento = :idtipodocumento AND s.estado = true") })
public class Socio implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public final static String FindByPNTipoAndNumeroDocumento = "Socio.FindByPNTipoAndNumeroDocumento";
	public final static String FindByPJTipoAndNumeroDocumento = "Socio.FindByPJTipoAndNumeroDocumento";

	private BigInteger idSocio;
	private PersonaNatural personaNatural;
	private PersonaJuridica personaJuridica;
	private PersonaNatural apoderado;
	private CuentaAporte cuentaAporte;
	private Date fechaInicio;
	private Date fechaFin;
	private int estado;
	private Set cuentaBancarias = new HashSet(0);

	public Socio() {
	}

	public Socio(BigInteger idSocio, CuentaAporte cuentaAporte,
			Date fechaInicio, boolean estado) {
		this.idSocio = idSocio;
		this.cuentaAporte = cuentaAporte;
		this.fechaInicio = fechaInicio;
		this.estado = (estado ? 1 : 0);
	}

	public Socio(BigInteger idSocio, PersonaNatural personaNatural,
			CuentaAporte cuentaAporte, PersonaJuridica personaJuridica,
			Date fechaInicio, Date fechaFin, boolean estado, Set cuentaBancarias) {
		this.idSocio = idSocio;
		this.personaNatural = personaNatural;
		this.cuentaAporte = cuentaAporte;
		this.personaJuridica = personaJuridica;
		this.fechaInicio = fechaInicio;
		this.fechaFin = fechaFin;
		this.estado = (estado ? 1 : 0);
		;
		this.cuentaBancarias = cuentaBancarias;
	}

	@XmlElement(name = "id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Id
	@Column(name = "ID_SOCIO", unique = true, nullable = false, precision = 22, scale = 0)
	public BigInteger getIdSocio() {
		return this.idSocio;
	}

	public void setIdSocio(BigInteger idSocio) {
		this.idSocio = idSocio;
	}

	@XmlElement
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_PERSONA_NATURAL")
	public PersonaNatural getPersonaNatural() {
		return this.personaNatural;
	}

	public void setPersonaNatural(PersonaNatural personaNatural) {
		this.personaNatural = personaNatural;
	}

	@XmlElement
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_CUENTAAPORTE", nullable = false)
	public CuentaAporte getCuentaAporte() {
		return this.cuentaAporte;
	}

	public void setCuentaAporte(CuentaAporte cuentaAporte) {
		this.cuentaAporte = cuentaAporte;
	}

	@XmlElement
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_PERSONA_JURIDICA")
	public PersonaJuridica getPersonaJuridica() {
		return this.personaJuridica;
	}

	public void setPersonaJuridica(PersonaJuridica personaJuridica) {
		this.personaJuridica = personaJuridica;
	}

	@XmlElement
	@Temporal(TemporalType.DATE)
	@Column(name = "FECHA_INICIO", nullable = false, length = 7)
	public Date getFechaInicio() {
		return this.fechaInicio;
	}

	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	@XmlElement
	@Temporal(TemporalType.DATE)
	@Column(name = "FECHA_FIN", length = 7)
	public Date getFechaFin() {
		return this.fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	@XmlElement
	@Column(name = "ESTADO", nullable = false, precision = 22, scale = 0)
	public boolean getEstado() {
		return (this.estado == 1 ? true : false);
	}

	public void setEstado(boolean estado) {
		this.estado = (estado ? 1 : 0);
	}

	@XmlTransient
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "socio")
	public Set<CuentaBancaria> getCuentaBancarias() {
		return this.cuentaBancarias;
	}

	public void setCuentaBancarias(Set cuentaBancarias) {
		this.cuentaBancarias = cuentaBancarias;
	}

	@XmlTransient
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_APODERADO")
	public PersonaNatural getApoderado() {
		return apoderado;
	}

	public void setApoderado(PersonaNatural apoderado) {
		this.apoderado = apoderado;
	}

}
